/*!
 * \file WtUftRunner.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief WonderTrader超高频运行器类定义文件
 *		  本文件定义了WtUftRunner超高频运行器类，负责UFT交易系统的初始化、配置和运行
 *		  专门针对超高频交易场景优化，支持微秒级延迟的交易执行
 *		  集成UFT引擎、行情解析、交易适配、策略管理、数据管理等核心组件
 *		  实现了统一的日志处理接口，为超高频交易系统提供核心运行框架
 */
#pragma once
#include <string>
#include <unordered_map>

#include "../Includes/ILogHandler.h"

#include "../WtUftCore/UftStrategyMgr.h"

#include "../WtUftCore/WtUftEngine.h"
#include "../WtUftCore/TraderAdapter.h"
#include "../WtUftCore/ParserAdapter.h"
#include "../WtUftCore/WtUftDtMgr.h"
#include "../WtUftCore/ActionPolicyMgr.h"

#include "../WTSTools/WTSHotMgr.h"
#include "../WTSTools/WTSBaseDataMgr.h"

NS_WTP_BEGIN
class WTSVariant;
NS_WTP_END

USING_NS_WTP;

/**
 * @class WtUftRunner
 * @brief WonderTrader超高频运行器类
 * @details WonderTrader系统的超高频交易运行器，负责UFT交易系统的生命周期管理
 *          主要功能包括：
 *          1. 系统初始化 - 初始化日志、配置、基础数据等
 *          2. UFT引擎管理 - 专门的超高频交易引擎
 *          3. 组件集成 - 集成行情解析器、交易适配器等
 *          4. 策略管理 - 加载和管理UFT交易策略
 *          5. 数据管理 - 管理超高频数据和实时数据
 *          6. 事件通知 - 处理系统事件和日志
 *          
 *          UFT特点：
 *          - 微秒级延迟：针对超高频交易优化
 *          - Level2数据：支持深度行情数据
 *          - 极速执行：最小化交易延迟
 *          - 内存优化：减少内存分配和拷贝
 *          
 *          实现ILogHandler接口，提供统一的日志处理能力
 */
class WtUftRunner : public ILogHandler
{
public:
	/**
	 * @brief 构造函数
	 * @details 初始化WtUftRunner实例，设置默认状态
	 *          初始化成员变量为默认值
	 *          注：UFT模式下信号处理被注释掉，以减少延迟
	 */
	WtUftRunner();
	
	/**
	 * @brief 析构函数
	 * @details 清理WtUftRunner资源
	 *          释放相关内存和资源
	 */
	~WtUftRunner();

public:
	/**
	 * @brief 初始化系统
	 * @return 成功返回true，失败返回false
	 * @details 执行系统基础初始化操作：
	 *          1. 初始化日志系统（logcfg.json/yaml）
	 *          2. 设置程序安装目录
	 *          3. 准备系统运行环境
	 */
	bool init();

	/**
	 * @brief 配置系统
	 * @return 成功返回true，失败返回false
	 * @details 加载和配置系统各个组件：
	 *          1. 加载主配置文件（config.json/yaml）
	 *          2. 初始化基础数据（交易时段、品种、合约、节假日等）
	 *          3. 初始化UFT引擎
	 *          4. 初始化数据管理器
	 *          5. 初始化动作策略管理器
	 *          6. 初始化行情解析器
	 *          7. 初始化交易适配器
	 *          8. 初始化UFT策略
	 */
	bool config();

	/**
	 * @brief 运行系统
	 * @param bAsync 是否异步运行，默认为false
	 * @details 启动整个超高频交易系统：
	 *          1. 启动行情解析器
	 *          2. 启动交易适配器
	 *          3. 启动UFT引擎
	 *          如果bAsync为true，则异步运行；否则阻塞运行
	 */
	void run(bool bAsync = false);

private:
	/**
	 * @brief 初始化交易适配器
	 * @param cfgTrader 交易适配器配置
	 * @return 成功返回true，失败返回false
	 * @details 根据配置初始化所有交易适配器
	 *          支持多个交易通道的并行管理
	 *          针对超高频交易优化延迟
	 */
	bool initTraders(WTSVariant* cfgTrader);
	
	/**
	 * @brief 初始化行情解析器
	 * @param cfgParser 行情解析器配置
	 * @return 成功返回true，失败返回false
	 * @details 根据配置初始化所有行情解析器
	 *          支持多个行情源的并行接入
	 *          针对超高频数据处理优化
	 */
	bool initParsers(WTSVariant* cfgParser);
	
	/**
	 * @brief 初始化数据管理器
	 * @return 成功返回true，失败返回false
	 * @details 初始化UFT数据管理器，配置数据源
	 *          管理超高频数据和实时数据
	 *          优化内存使用和数据访问速度
	 */
	bool initDataMgr();
	
	/**
	 * @brief 初始化UFT策略
	 * @return 成功返回true，失败返回false
	 * @details 加载和初始化所有UFT策略
	 *          创建策略上下文并绑定到引擎
	 *          支持微秒级策略执行
	 */
	bool initUftStrategies();

	/**
	 * @brief 初始化UFT引擎
	 * @return 成功返回true，失败返回false
	 * @details 初始化超高频交易引擎
	 *          配置引擎参数和优化设置
	 *          绑定各个组件管理器
	 */
	bool initEngine();

//////////////////////////////////////////////////////////////////////////
//ILogHandler
public:
	/**
	 * @brief 处理日志追加
	 * @param ll 日志级别
	 * @param msg 日志消息
	 * @details 实现ILogHandler接口，处理系统日志
	 *          在超高频模式下，日志处理也需要优化性能
	 */
	virtual void handleLogAppend(WTSLogLevel ll, const char* msg) override;

private:
	WTSVariant*			_config;		///< 系统配置对象
	TraderAdapterMgr	_traders;		///< 交易适配器管理器
	ParserAdapterMgr	_parsers;		///< 行情解析器管理器

	WtUftEngine			_uft_engine;	///< UFT超高频交易引擎

	WtUftDtMgr			_data_mgr;		///< UFT数据管理器

	WTSBaseDataMgr		_bd_mgr;		///< 基础数据管理器
	WTSHotMgr			_hot_mgr;		///< 主力合约管理器

	UftStrategyMgr		_uft_stra_mgr;	///< UFT策略管理器

	ActionPolicyMgr		_act_policy;	///< 动作策略管理器
};

